home *** CD-ROM | disk | FTP | other *** search
/ PC Plus SuperCD (UK) 1995 August / PC Plus Super CD (Issue 106) (PCP106) (August 1995).iso / pcplus / handson / wilf / buttons.bas < prev    next >
Encoding:
BASIC Source File  |  1995-07-31  |  2.5 KB  |  151 lines

  1. DECLARE SUB BasicInt (IntType AS INTEGER)
  2. '
  3. ' Demonstration of Mouse-controlled Buttons
  4. '
  5. TYPE REGISTERS
  6.  AX AS INTEGER
  7.  BX AS INTEGER
  8.  CX AS INTEGER
  9.  DX AS INTEGER
  10.  DS AS INTEGER
  11.  SI AS INTEGER
  12.  ES AS INTEGER
  13.  DI AS INTEGER
  14.  FL AS INTEGER
  15. END TYPE
  16. DIM SHARED REGS AS REGISTERS
  17.  
  18. '*************************************
  19. SCREEN 9
  20. COLOR 8, 11
  21. CLS
  22. '************************
  23.                 
  24. Choice% = 1
  25. GOSUB PaintButtons
  26.  
  27.  
  28.  
  29.  
  30. ' test for presence of a mouse
  31.  
  32. REGS.AX = 0
  33. CALL BasicInt(&H33)
  34. IF REGS.AX THEN
  35.  Mouse% = 1
  36.  REGS.AX = 4
  37.  REGS.CX = 315
  38.  REGS.DX = 35
  39.  CALL BasicInt(&H33)
  40.  REGS.AX = 1
  41.  CALL BasicInt(&H33)
  42. END IF
  43.  
  44. ' handle both keys and mouse clicks
  45.  
  46. WHILE Choice% <> 7
  47.  x$ = ""
  48.  WHILE LEN(x$) = 0
  49.   Counter! = TIMER
  50.   WHILE LEN(x$) = 0
  51.    x$ = INKEY$
  52.    IF Mouse% THEN
  53.     REGS.AX = 3
  54.     CALL BasicInt(&H33)
  55.     IF (REGS.BX AND 1) THEN
  56.      IF REGS.CX > 300 AND REGS.CX < 331 THEN
  57.       IF (REGS.DX MOD 42) > 21 THEN
  58.        OldChoice% = Choice%
  59.        Choice% = 1 + INT(REGS.DX / 42)
  60.        IF Choice% = OldChoice% THEN
  61.         IF TIMER - Counter! < .3 THEN
  62.          IF NoGap% = 0 THEN
  63.           x$ = CHR$(13)
  64.          END IF
  65.         END IF
  66.        ELSE
  67.         GOSUB PaintButtons
  68.        END IF
  69.        Counter! = TIMER
  70.        NoGap% = 1
  71.       END IF
  72.      END IF
  73.     ELSE
  74.      NoGap% = 0
  75.     END IF
  76.    END IF
  77.   WEND
  78.   IF LEN(x$) = 2 THEN
  79.    IF RIGHT$(x$, 1) = "H" THEN
  80.     Choice% = Choice% - 1
  81.    END IF
  82.    IF RIGHT$(x$, 1) = "P" THEN
  83.     Choice% = Choice% + 1
  84.    END IF
  85.    IF Choice% = 0 THEN Choice% = 1
  86.    IF Choice% = 8 THEN Choice% = 7
  87.    GOSUB PaintButtons
  88.   END IF
  89.   IF x$ <> CHR$(13) THEN x$ = ""
  90.  WEND
  91.  LINE (150, 0)-(250, 349), 0, BF
  92.  LINE (150, 42 * Choice% - 18)-(250, 42 * Choice% + 4), 12, BF
  93. WEND
  94.  
  95. IF Mouse% THEN
  96.  REGS.AX = 2
  97.  CALL BasicInt(&H33)
  98. END IF
  99.  
  100. TimeStart! = TIMER
  101. WHILE TIMER - TimeStart! < 2
  102. WEND
  103.  
  104.  
  105.  
  106. STOP
  107.  
  108.  
  109.  
  110.  
  111. '************************
  112. ' Subroutine to paint the buttons
  113. '
  114. PaintButtons:
  115.  IF Mouse% THEN
  116.   REGS.AX = 2
  117.   CALL BasicInt(&H33)
  118.  END IF
  119.  FOR i% = 1 TO 7
  120.   LOCATE 3 * i%, 39
  121.   IF i% = Choice% THEN Hue% = 15 ELSE Hue% = 8
  122.   COLOR Hue%
  123.   PRINT i%
  124.   LINE (300, 42 * i% - 18)-(330, 42 * i% + 4), Hue%, B
  125.  NEXT
  126.  IF Mouse% THEN
  127.   REGS.AX = 1
  128.   CALL BasicInt(&H33)
  129.  END IF
  130.  
  131.  
  132.  
  133.  RETURN
  134.  
  135. SUB BasicInt (IntType AS INTEGER) STATIC
  136.  
  137.  
  138. DIM ASM%(54)
  139. DEF SEG = VARSEG(ASM%(0))
  140.  
  141. IF ASM%(1) = 0 THEN
  142.  BLOAD "BASICINT.OVL", VARPTR(ASM%(0))
  143. END IF
  144.  
  145. CALL ABSOLUTE(REGS, IntType, VARPTR(ASM%(0)))
  146.  
  147. DEF SEG
  148.  
  149. END SUB
  150.  
  151.